#ifndef __BASIC_MYSQLC_H__
#define __BASIC_MYSQLC_H__

#include <basic/misc.h>

__BEGIN_DECLS

#define MY_OK						0
#define MY_ERROR					-10000
#define MY_COL_NOT_SUPPORTED		-10001
#define MY_NO_DATA_FOUND			-1
#define MY_UNIQUE_VIOLATE			1062

struct _mysqlc;
typedef struct _mysqlc *MYSQLC;

/*
 * 数据库环境初始化
 */
extern int	/* 0:成功 -1:失败 */
mysqlc_init();

/*
 * 数据库环境清理
 */
extern int	/* 0:成功 -1:失败 */
mysqlc_clean();

/*
 * 完整数据库连接
 */
extern int	/* SQLCODE: MYSQL系统错误，常用见MY_OK等定义 */
mysqlc_connect_ex(
        char *dbuser,           /* [IN] 用户 */
        char *dbpasswd,         /* [IN] 密码 */
        char *database,         /* [IN] 数据库 */
        char *host,             /* [IN] 宿主 */
        char *charset,          /* [IN] 字符集 */
        MYSQLC *pdb             /* [OUT] 接口地址 */
        );
#define mysqlc_connect(_dbuser,_dbpasswd,_database,_host,_charset)  \
mysqlc_connect_ex(_dbuser,_dbpasswd,_database,_host,_charset,NULL)

/*
 * 断开数据库连接
 */
extern int	/* SQLCODE:MYSQL系统错误，常用见MY_OK等定义 */
mysqlc_disconnect_ex(
        MYSQLC db               /* [IN] 接口 */
);
#define mysqlc_disconnect() mysqlc_disconnect_ex(NULL)

/*
 * 开始事务
 */
extern int	/* SQLCODE:MYSQL系统错误，常用见MY_OK等定义 */
mysqlc_begin_ex(
        MYSQLC db               /* [IN] 接口 */
);
#define mysqlc_begin() mysqlc_begin_ex(NULL)

/*
 * 提交事务
 */
extern int	/* SQLCODE:MYSQL系统错误，常用见MY_OK等定义 */
mysqlc_commit_ex(
        MYSQLC db               /* [IN] 接口 */
);
#define mysqlc_commit() mysqlc_commit_ex(NULL)

/*
 * 回滚事务
 */
extern int	/* SQLCODE:MYSQL系统错误，常用见MY_OK等定义 */
mysqlc_rollback_ex(
        MYSQLC db               /* [IN] 接口 */
);
#define mysqlc_rollback() mysqlc_rollback_ex(NULL)

/*
 * 执行非查询SQL语句
 */
extern int	/* SQLCODE:MYSQL系统错误，常用见MY_OK等定义 */
mysqlc_exec_ex(
        MYSQLC db,              /* [IN] 接口 */
        char *sql				/* [IN] 执行的SQL语句 */
);
#define mysqlc_exec(_sql) mysqlc_exec_ex(NULL,_sql)

/*
 * 执行查询SQL语句
 */
extern int	/* SQLCODE:MYSQL系统错误，常用见MY_OK等定义 */
mysqlc_query_ex(
        MYSQLC db,              /* [IN] 接口 */
        char *sql,				/* [IN] 执行的SQL语句 */
        int request_row_num,	/* [IN] 需读取的记录数 */
        DBC_RSET *rset          /* [OUT] 查询结果集，必须由dbc_query_free释放 */
);
#define mysqlc_query(_sql,_request_row_num,_rset)   \
mysqlc_query_ex(NULL,_sql,_request_row_num,_rset)

/*
 * 获取下一序列号
 */
extern int	/* SQLCODE:MYSQL系统错误，常用见MY_OK等定义 */
mysqlc_sequence_nextval_ex(
        MYSQLC db,              /* [IN] 接口 */
        char *seq,				/* [IN] 序列名 */
        long *nextval         	/* [OUT] 下一序列号 */
);
#define mysqlc_sequence_nextval(_seq,_nextval)   \
mysqlc_sequence_nextval_ex(0,_seq,_nextval)

__END_DECLS

#endif
